# 使用本周学习的技术改造第一周的计算器实现，其目标如下：
#    1. 运行后提示让用户输入一个数字
#    2. 提示输入操作符（+ - * /）
#    3. 再次提示输入一个数字
#    4. 打印计算结果
#    5. 在不退出程序的前提下，可以允许用户继续输入新一组数据计
#    6. 尽可能改善用户体验（新需求）


def calculator():
    """
    这个函数实现一个简单的计算器，允许用户输入数字和操作符进行基本的数学运算。

    输入：
    - 第一个数字 (num1): 用户输入的第一个数字
    - 操作符 (operator): 用户输入的操作符，可以是 '+', '-', '*', '/'
    - 第二个数字 (num2): 用户输入的第二个数字

    输出：
    - 打印计算结果

    用户可以选择是否继续计算，输入 'exit' 退出程序。

    异常处理：
    - 如果用户输入无效的数字，捕获 ValueError 异常并提醒用户重新输入。
    - 如果用户尝试除以零，捕获 ZeroDivisionError 异常并提醒用户重新输入。

    改善用户体验：
    - 在每次计算后询问用户是否继续，输入 'exit' 退出，其他键继续。
    """
    while True:
        try:
            # 提示用户输入数字
            num1 = float(input("请输入第一个数字: "))

            # 提示用户输入操作符
            operator = input("请输入操作符 (+, -, *, /): ")

            # 提示用户输入第二个数字
            num2 = float(input("请输入第二个数字: "))

            # 执行计算
            if operator == '+':
                result = num1 + num2
            elif operator == '-':
                result = num1 - num2
            elif operator == '*':
                result = num1 * num2
            elif operator == '/':
                result = num1 / num2
            else:
                print("无效的操作符，请重新输入")
                continue

            # 打印计算结果
            print(f"结果: {result}")

            # 询问用户是否继续计算
            choice = input("是否继续计算？(输入 'exit' 退出，其他任意键继续): ")
            if choice.lower() == 'exit':
                break
        except ValueError:
            print("输入无效，请确保输入的是有效的数字")
        except ZeroDivisionError:
            print("除数不能为零，请重新输入")


if __name__ == "__main__":
    calculator()
